package org.finesys.common.websocket.service.impl;

import org.finesys.common.core.module.R;
import org.finesys.common.websocket.constants.WebSocketConstants;
import org.finesys.common.websocket.service.WebSocketSendService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Service;


/**
 * 发送消息具体实现类
 */
@Service
public class WebSocketSendServiceImpl implements WebSocketSendService {

    @Autowired
    SimpMessagingTemplate simpMessagingTemplate;

    /**
     * 将消息转换为JSON格式并发送到所有客户端。
     *
     * @param message 要发送的消息对象
     */
    @Override
    public void convertAndSend(Object message) {
        simpMessagingTemplate.convertAndSend(WebSocketConstants.WEBSOCKET_MESSAGE_ALL, responseResult(message));
    }

    /**
     * 将消息转换为JSON格式并发送到指定用户。
     *
     * @param userName 用户名
     * @param message  要发送的消息对象
     */
    @Override
    public void convertAndSendToUser(String userName, Object message) {
        simpMessagingTemplate.convertAndSendToUser(userName, WebSocketConstants.WEBSOCKET_MESSAGE_USER, responseResult(message));
    }

    /**
     * 将消息转换为JSON格式并发送到指定的目的地。
     *
     * @param destination 消息发送的目的地
     * @param message     要发送的消息对象
     */
    @Override
    public void convertAndSend(String destination, Object message) {
        simpMessagingTemplate.convertAndSend(destination, responseResult(message));
    }

    /**
     * 将消息转换为JSON格式并发送到指定用户的指定目的地。
     *
     * @param userName    用户名
     * @param destination 消息发送的目的地
     * @param message     要发送的消息对象
     */
    @Override
    public void convertAndSendToUser(String userName, String destination, Object message) {
        simpMessagingTemplate.convertAndSendToUser(userName, destination, responseResult(message));
    }

    /**
     * 移除指定的发送目的地。
     *
     * @param destination 要移除的发送目的地
     */
    @Override
    public void removeSend(String destination) {

    }

    /**
     * 移除指定用户的发送功能。
     *
     * @param userName 要移除发送功能的用户名
     */
    @Override
    public void removeSendUser(String userName) {

    }

    /**
     * 移除指定用户在指定目的地的发送功能。
     *
     * @param userName    要移除发送功能的用户名
     * @param destination 要移除的发送目的地
     */
    @Override
    public void removeSendUser(String userName, String destination) {

    }

    /**
     * 返回结果封装
     */
    private Object responseResult(Object message) {
        Object result;
        if (message instanceof R) {
            result = message;
        } else {
            result = R.success(message);
        }
        return result;
    }
}
